package cn.autumnorange.app.common.consumer.rpc.feign.okhttp;

import feign.Feign;
import okhttp3.ConnectionPool;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;
// 在配置类将 OkHttpClient 注入 Spring 的容器中，这里我们指定了连接池的大小，最大保持连接数为 10 ，并且在 5 分钟不活动之后被清除。
/** 配置 okhttp 与连接池 ConnectionPool 默认创建10个线程，保持5分钟长连接 */
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class) // SpringBoot自动配置
public class OkHttpConfig {

  // 默认老外留给你彩蛋中文乱码，加上它就 OK
  //  @Bean
  //  public Encoder encoder() {
  //    return new FormEncoder();
  //  }

  @Bean
  public okhttp3.OkHttpClient okHttpClient() {
    return new okhttp3.OkHttpClient.Builder()
        // 配置连接超时参数,默认10000
        .connectTimeout(500, TimeUnit.MILLISECONDS)
        // 读超时参数,默认10000
        .readTimeout(2000, TimeUnit.MILLISECONDS)
        // 写超时参数,默认10000
        .writeTimeout(2000, TimeUnit.MILLISECONDS)
        // 是否自动重连
        .retryOnConnectionFailure(true)
        .connectionPool(new ConnectionPool(10, 5L, TimeUnit.MINUTES))
        .build();
  }
}
